package com.yanggu.scala.chapater06.oop

object CatDemo {

  def main(args: Array[String]): Unit = {
    //scala对象的生命和使用和java基本类似
    //scala的成员变量必须进行显示初始化。
    //默认scala的成员变量都是private的。同时提供了类似于的对应public的getterXXX和setterXXX()方法
    //public String name() {
    //        return this.name;
    //    }
    //
    //public void name_$eq(final String x$1) {
    //        this.name = x$1;
    //}
    //new对象时可以省略(), 但是不建议省略
    val cat = new Cat
    cat.name = "咪咪"
    cat.age = 20
    cat.color = "白色"
    println(cat.name)
    println(cat)
    cat.sayMiMi("咪咪")
  }
}

class Cat {

  /**
   * 成员变量必须显示初始化, 可以使用_代替对应的值
   * 不能使用var name = _ 因为编译器无法推断参数类型
   */
  var name: String = _

  var age: Int = _

  var color: String = _

  def sayMiMi(word: String): Unit = {
    println("say" + word)
  }

  override def toString = s"Cat($name, $age, $color)"
}
